Skip to content

GBAC#1584

Merged
kbatuigas merged 37 commits intov-WIP/26.1from
gbac
Mar 31, 2026
Merged

GBAC#1584
kbatuigas merged 37 commits intov-WIP/26.1from
gbac

Conversation

@paulohtb6
Copy link
Copy Markdown
Contributor

@paulohtb6 paulohtb6 commented Feb 24, 2026

Description

Related PR to add Security to Admin API v2: redpanda-data/api-docs#60
Single sourcing to Cloud: redpanda-data/cloud-docs#536

This pull request introduces comprehensive documentation for Group-Based Access Control (GBAC) in Redpanda, detailing how permissions can now be assigned to OIDC groups in addition to individual users. It adds new conceptual and how-to guides, updates navigation, and describes configuration, usage patterns, and limitations for GBAC. It also documents new configuration properties relevant to group extraction from authentication tokens.

The most important changes are:

GBAC Documentation and How-to Guides:

  • Added a new how-to guide gbac.adoc under security/authorization, with detailed instructions, usage patterns, configuration, and examples for assigning groups to roles and creating group-based ACLs. [1] [2]
  • Added partials for UI-based group-to-role assignment (gbac-assign-group-role.adoc) and group ACL creation (gbac-create-group-acl.adoc). [1] [2]

Navigation and Discoverability:

  • Updated navigation (nav.adoc) to include GBAC under both Kubernetes and general security/authorization sections, making the new documentation easily discoverable. [1] [2]
  • Updated the main authorization index to mention group-based access control alongside ACLs and RBAC.

Release Notes and Feature Announcements:

  • Announced GBAC as a new feature in the release notes, summarizing its capabilities and usage patterns.
  • Documented two new configuration properties for GBAC: nested_group_behavior and oidc_group_claim_path.

OIDC Authentication Documentation:

  • Added a tip to the OIDC authentication documentation highlighting that GBAC can be used to assign permissions to groups, not just users.

Resolves DOC-1789
Review deadline: March 3rd

Page previews

Checks

  • New feature
  • Content gap
  • Support Follow-up
  • Small fix (typos, links, copyedits, etc)

@paulohtb6 paulohtb6 requested a review from a team as a code owner February 24, 2026 19:23
@netlify
Copy link
Copy Markdown

netlify bot commented Feb 24, 2026

Deploy Preview for redpanda-docs-preview ready!

Name Link
🔨 Latest commit c2263bf
🔍 Latest deploy log https://app.netlify.com/projects/redpanda-docs-preview/deploys/69cb4d94d765d36925fd0a87
😎 Deploy Preview https://deploy-preview-1584--redpanda-docs-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Feb 24, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 6aad09da-c2c5-475b-843e-af5fe27e1446

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch gbac

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Member

@nguyen-andrew nguyen-andrew left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good so far! Just some minor comments and questions

@@ -0,0 +1,336 @@
// tag::single-source[]

Group-based access control (GBAC) builds on xref:manage:security/authorization/rbac.adoc[role-based access control (RBAC)] to simplify permission management at scale. Instead of assigning roles or ACLs to individual users, you assign them to OIDC groups managed by your identity provider (IdP). Users inherit permissions from all groups reported in their OIDC token claims, so onboarding and offboarding require no changes in Redpanda.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if we should mention OIDC earlier in the paragraph (like in the first sentence) so readers immediately understand that GBAC depends on OIDC being configured. I think the OIDC dependency could be easy to miss upfront until the reader reads further down (like the Prerequisites section).

Users with more than 200 group memberships in Azure AD receive a URL reference in their token instead of a list of group names. Redpanda does not follow that URL and cannot resolve groups in this case. Mitigation: filter token claims to include only the groups relevant to Redpanda.

Nested groups::
Redpanda does not recursively resolve nested group hierarchies. If group A contains group B, only the direct memberships reported in the token are used. Use `nested_group_behavior: suffix` to extract the last path segment from hierarchical group names when needed.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding a link to Customize token claim extraction#nested_group_behavior or the nested_group_behavior section in the cluster properties reference could be helpful here too, if possible.

Copy link
Copy Markdown
Contributor

@treevon treevon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good. The token extraction section is really nice with clear examples

== Prerequisites

* xref:manage:security/authentication.adoc#oidc[OIDC authentication] must be configured and enabled on your cluster.
* Superuser access to configure cluster properties and manage ACLs.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit - this is a prerequisite to enable OIDC, so should appear first

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@treevon for Cloud should we just remove this superuser prereq?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@treevon since we don't have superuser in Cloud, can we remove (conditionalize this out) for Cloud?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kbatuigas would you please conditionalize this out for Cloud docs?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved superuser prereq into conditional

--resource-pattern-type prefixed
----

If your groups use path-style names (with xref:reference:properties/cluster-properties.adoc#nested_group_behavior[`nested_group_behavior`] set to `none`), use the full path as the principal name:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should move this to the section on claim extraction

Copy link
Copy Markdown
Member

@nguyen-andrew nguyen-andrew left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me

Copy link
Copy Markdown

@graham-rp graham-rp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We ended up removing the --group flags on rpk security role


[,bash]
----
rpk security role assign <role-name> --group <group-name>
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We ended up pivoting to using ACLs directly in rpk. This gets rid of --group in favor of the principal directly, so rpk security role assign <role-name> --principal Group:<group-name>

.Authorization matched on a group ACL
[%collapsible]
====
This example shows an API Activity event (6003) where the authorization decision matched an ALLOW ACL on a `Group:` principal. The `actor.user.groups` field includes the matched group with type `idp_group`, and the `authorization_metadata` shows the group ACL that granted access. See xref:manage:security/authorization/gbac.adoc[].
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This example shows an API Activity event (6003) where the authorization decision matched an ALLOW ACL on a `Group:` principal. The `actor.user.groups` field includes the matched group with type `idp_group`, and the `authorization_metadata` shows the group ACL that granted access. See xref:manage:security/authorization/gbac.adoc[].
This example shows an API Activity (6003) where the authorization decision matched an ALLOW ACL on a `Group:` principal. The `actor.user.groups` field includes the matched group with type `idp_group`, and the `authorization_metadata` shows the group ACL that granted access. See xref:manage:security/authorization/gbac.adoc[].

+
--
. From *Security* on the left navigation menu, select the *Groups* tab.
.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kbatuigas reminder about these steps. We can update later if necessary

@@ -0,0 +1,13 @@
To create an ACL for an OIDC group in {ui}:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Style suggestion: The section is titled "Create group-based ACLs" but the steps navigate to the Roles tab. The NOTE explaining why ("{ui} assigns ACLs through roles") comes after the procedure on line 13, which may confuse users who expect to land on an ACL-related page.

Consider adding a brief lead-in sentence before the numbered steps:

In {ui}, group-based ACLs are managed through roles. To create an ACL for an OIDC group:

The NOTE at the end can stay as supplementary detail.

@micheleRP
Copy link
Copy Markdown
Contributor

Style suggestion — modules/manage/pages/security/authorization/index.adoc line 8:

"Authentication grants permission to interact with Redpanda resources" conflates authentication with authorization. Authentication verifies identity, not permissions.

Suggest:

Authentication verifies who a principal is. Authorization controls what that principal can do once authenticated.

Copy link
Copy Markdown
Contributor

@micheleRP micheleRP left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks @kbatuigas!

@david-yu
Copy link
Copy Markdown
Contributor

Is GBAC an enterprise only feature? if so, we should call that out and add to Enterprise features list.

@kbatuigas
Copy link
Copy Markdown
Contributor

Is GBAC an enterprise only feature? if so, we should call that out and add to Enterprise features list.

@david-yu Yes -- I have a pending commit to https://deploy-preview-1584--redpanda-docs-preview.netlify.app/current/get-started/licensing/overview/#self-managed, but I have not yet received confirmation on what the behavior is when the license expires.

@david-yu
Copy link
Copy Markdown
Contributor

Is GBAC an enterprise only feature? if so, we should call that out and add to Enterprise features list.

@david-yu Yes -- I have a pending commit to https://deploy-preview-1584--redpanda-docs-preview.netlify.app/current/get-started/licensing/overview/#self-managed, but I have not yet received confirmation on what the behavior is when the license expires.

@nguyen-andrew or @treevon Could you confirm the behavior upon license expiry? This is what i got from Claude so far

 When a license expires, feature_table::should_sanction() returns true (src/v/features/feature_table.cc:768-778). The effects:

 1. New group-principal ACL creation is rejected with an error message like: "A Redpanda Enterprise Edition license is required to create an ACL with a group
  principal." (src/v/features/enterprise_feature_messages.h:115-119)
 2. Existing ACLs/configuration remain in place — the sanction blocks new operations, not existing state

@kbatuigas
Copy link
Copy Markdown
Contributor

kbatuigas commented Mar 31, 2026

Is GBAC an enterprise only feature? if so, we should call that out and add to Enterprise features list.

@david-yu Yes -- I have a pending commit to https://deploy-preview-1584--redpanda-docs-preview.netlify.app/current/get-started/licensing/overview/#self-managed, but I have not yet received confirmation on what the behavior is when the license expires.

@nguyen-andrew or @treevon Could you confirm the behavior upon license expiry? This is what i got from Claude so far

 When a license expires, feature_table::should_sanction() returns true (src/v/features/feature_table.cc:768-778). The effects:

 1. New group-principal ACL creation is rejected with an error message like: "A Redpanda Enterprise Edition license is required to create an ACL with a group
  principal." (src/v/features/enterprise_feature_messages.h:115-119)
 2. Existing ACLs/configuration remain in place — the sanction blocks new operations, not existing state

@nguyen-andrew @treevon @david-yu This PR must be merged tonight in order for us to prep the release PR tomorrow. I'll do that now, but I posted in the #gbac channel in Slack so I can check for a response there, or try and add a quick doc update tomorrow. cc @JakeSCahill if we get confirmation on the license expiry tomorrow, could we still add that in to the release PR before you have to merge it?

@kbatuigas kbatuigas merged commit 0a5e0e8 into v-WIP/26.1 Mar 31, 2026
7 checks passed
@kbatuigas kbatuigas deleted the gbac branch March 31, 2026 04:49
JakeSCahill added a commit to david-yu/docs that referenced this pull request Mar 31, 2026
Adds enterprise license requirement banner to the Group controller
documentation as GBAC (Group-Based Access Control) is an enterprise
feature that requires OIDC authentication.

Addresses PR feedback from david-yu requesting the license banner
based on the pattern established in PR redpanda-data#1584.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants